perm filename SAVKDS[KID,KMC] blob
sn#122894 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE SAVKDS ;SAVE SOME FILES FROM THE UDP.
;THIS PROGRAM COPIES A FILE FROM THE UDP TO DISK GIVING IT
; A DMD EXTENSION. THE NAME OF THE FILE IS READ FROM THE TTY.
FILNAM: 0 ;FILE NAME TO BE COPIED.
SIXBIT /DMD/
0
0
INCMD: 0
BLKNO: 0
0
FILTH: 0
OUTCMD: 0
0
0
UDPCHN ←17
DSKCHN ←16
PAKST ←←1
A←1
B←2
C←3
P←7
START: ;FIRST INIT THE UDP
INIT UDPCHN,17 ;DUMP MODE APPROPRIATE
SIXBIT /UDP/
0
JRST [OUTSTR [ASCIZ /CANNOT INIT UDP/]
CALL [SIXBIT /EXIT/] ];CAN'T CONTINUE
ENTER UDPCHN,[SIXBIT /KMC/
0
0
0]
JRST [OUTSTR [ASCIZ /CURRENT PAK PROTECTED/]
CALL [SIXBIT /EXIT/]]
;NOW INIT THE DISK
INIT DSKCHN,17 ;DUMP MODE APPROPRIATE
SIXBIT /DSK/
0
JRST [OUTSTR [ASCIZ /CANNOT INIT DISK/]
CALL [SIXBIT /EXIT/]];
;NOW READ THE FILE NAME
MOVEI A,=30
MOVEI B,0
FNCHL: INCHRW C
ANDI C,177
SUBI C,40
JUMPLE C,FNCHX
LSH C,0(A)
IOR B,C
SUBI A,6
JUMPGE A,FNCHL
FNCHX: MOVEM B,FILNAM
;NOW ENTER THE FILE NAME
ENTER DSKCHN,FILNAM
JRST [OUTSTR [ASCIZ /CANNOT ENTER THE FILE/]
CALL [SIXBIT /EXIT/]]
;NOW READ UDP DIRECTORY
IN UDPCHN,[IOWD =2336,DIRECT
PAKST]
JRST .+2
JRST [OUTSTR [ASCIZ /ERROR ON UDP DIR READ/]
CALL [SIXBIT /EXIT/]]
;CHECK THAT WORD 0 OF DIRECTORY IS REASONABLE.
MOVE A,DIRECT
JUMPL A,[OUTSTR [ASCIZ /NEGATIVE NO. OF UDP ENTRIES/]
CALL [SIXBIT /EXIT/]]
CAILE A,=1164 ;ONLY 1164 ENTRIES POSSIBLE
JRST [OUTSTR [ASCIZ /TOO MANY UDP ENTRIES/]
CALL [SIXBIT /EXIT/]]
MOVEI B,DIRECT+2
MOVE A,DIRECT
LSH A,1
ADD A,B
FIND1: CAMN A,B
JRST FINDF
MOVE C,FILNAM
CAMN C,0(A)
JRST FINDX
SUBI A,2
JRST FIND1
FINDF: ;FILE NOT FOUND
OUTSTR [ASCIZ /FILE NOT FOUND/]
CALL [SIXBIT /EXIT/]
FINDX: ;APPROPRIATE ENTRY IN DIRECTORY FOUND
HLR B,1(A) ;FILE LENGTH
MOVEM B,FILTH
ADDI B,200
MOVEM B,FOO ;WORD COUNT IN DISK FILE
HRRZ B,1(A) ;STARTING BLOCK NUMBER
MOVEM B,BLKNO
;NOW WRITE 1ST 200 WORDS OF DISK FILE
OUTPUT DSKCHN,[IOWD 200,FOO
0]
;NOW WRITE THE SOUND
MOVN A,FILTH ;WORDS TO BE COPIED
LSH A,=18 ;NEG OF WORD COUNT
HRRI A,FOO-1 ;IOWD CONSTRUCTED
MOVEM A,INCMD
MOVEM A,OUTCMD
INPUT UDPCHN,INCMD
OUTPUT DSKCHN,OUTCMD
;NOW CLOSE THE FILE
RELEAS DSKCHN,
RELEAS UDPCHN,
OUTSTR [ASCIZ /FILE WRITTEN/]
CALL [SIXBIT /EXIT/]
FOO: BLOCK =60000
DIRECT: BLOCK =3000
END START